import java.util.HashMap;

import _Banque.*;
import _Tests.Tests;
import _Utils.Data;
import _Exception.*;

/**
 * Operations bancaire du 14/12/11
 * @author V. Loïc
 */
public class TV_Banque_14
{
	public static void main(String[] args) throws Exception
	{
		Tests.Begin("Validation de la banque", "1.1.0");
		
		Tests.Design("Operations bancaires du 14/12/11", 3);
		
		// --- on recupere la banque de la veille et les titulaires
		Banque banque = (Banque) Data.load("banque_13", "1.1.0");
		HashMap<String, Titulaire> titulaires = (HashMap<String, Titulaire>) Data.load("titulaires", "1.1.0");
		
		AgenceBancaire agenceNice = banque.getAgence(1001);
		AgenceBancaire agenceJuans = banque.getAgence(1002);
		
		Titulaire val = titulaires.get("valentin");
		Titulaire quentin = titulaires.get("quentin");
		Titulaire antho = titulaires.get("anthony");
		Titulaire modou = titulaires.get("modou");
		Titulaire ju = titulaires.get("julien");
		Titulaire flo = titulaires.get("florian");
		Titulaire lolo = titulaires.get("lorris");
		Titulaire toto = titulaires.get("thomas");
		Titulaire kevin = titulaires.get("kevinS");
		Titulaire anais = titulaires.get("anais");
		
		CompteEpargne ceModou = (CompteEpargne) agenceNice.compteBancaire(4000001);
		CompteEpargne ceQuentin = (CompteEpargne) agenceNice.compteBancaire(4000002);
		CompteEpargne ce2Quentin = (CompteEpargne) agenceNice.compteBancaire(4000003);
		CompteEpargne ceLucas = (CompteEpargne) agenceNice.compteBancaire(4000004);
		CompteEpargne ceToto = (CompteEpargne) agenceNice.compteBancaire(4000005);
		CompteEpargne ceKevin = (CompteEpargne) agenceNice.compteBancaire(4000006);
		
		CompteCourant ccQuentin = (CompteCourant) agenceNice.compteBancaire(8000001);
		CompteCourant ccVal = (CompteCourant) agenceNice.compteBancaire(8000002);
		CompteCourant ccJu = (CompteCourant) agenceNice.compteBancaire(8000003);
		CompteCourant ccFlo = (CompteCourant) agenceNice.compteBancaire(8000004);
		CompteCourant cc2Quentin = (CompteCourant) agenceJuans.compteBancaire(8000005);
		CompteCourant ccAntho = (CompteCourant) agenceNice.compteBancaire(8000006);
		CompteCourant ccLorris = (CompteCourant) agenceNice.compteBancaire(8000007);

		
		Tests.Case("Verification des statistiques de la veille");
		{
		    Tests.Unit(2000651.75, banque.totalDepots());
		    Tests.Unit(12, banque.nombreOperations("2011/12/13"));
        }

        Tests.Case("Operations de valentin");
        {
            ccVal.executer("Retrait 100 euros", 'R', 100);
            ccVal.executer("Retrait de 999 942 euros", 'R', 999941);
            ccVal.executer("Versement de 9000 euros", 'V', 9000);
        }
        
        Tests.Case("Operations d'Anais");
        {
            agenceNice.ouvrirCompte(anais);
            CompteCourant ccAnais = (CompteCourant)agenceNice.compteBancaire(8000008);
            ccAnais.executer("Versement du salaire", 'V', 7850);
        }
        
        Tests.Case("Operations de Quentin");
        {
            ccQuentin.executer("retrait 500.07", 'R', 500.07f);
            ce2Quentin.executer("recu virement", 'V', 12852.87f);
            quentin.setAdresse("17 chemin de la Piniere");
        }
        
        Tests.Case("Operations de Anthony");
        {
           // ccAntho.executer("ajoute des sous", 'V', 3941.41);
           // ccAntho.cloturer();
        }
        
        Tests.Case("Operations de lorris");
        {
            ccLorris.executer("versement 150", 'V', 150);
            Tests.Unit(150, ccLorris.getSoldeCompte());
        }
        
        Tests.Case("Operations de thomas");
        {
            ceToto.executer("virement", 'V', 356.35f);
            ceToto.executer("virement encore", 'V', 134.26f);
        }
        
        Tests.Case("Operations de Kevin S.");
        {
            ceKevin.executer("retrait", 'R', 507.35f);
        }

		Tests.Case("Verification des statistiques de la journée");
		{
		    Tests.Unit(1029946.6875, banque.totalDepots());
		    Tests.Unit(10, banque.nombreOperations(_Banque.dateCourante()));
		}

		// --- enregistrement de la banque et des titulaires
		//Tests.Unit(true, Data.store(banque, "banque_14", "1.1.0"));
		//Tests.Unit(true, Data.store(titulaires, "titulaires", "1.1.0"));
		
		
		Tests.End();
	}

}
